<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>轮播图点击切换</title>
  <style>
    * {
      box-sizing: border-box;
    }

    .slider {
      width: 560px;
      height: 400px;
      overflow: hidden;
    }

    .slider-wrapper {
      width: 100%;
      height: 320px;
    }

    .slider-wrapper img {
      display: block;
      width: 100%;
      height: 100%;
    }

    .slider-footer {
      position: relative;
      height: 80px;
      padding: 12px 12px 0 12px;
      background-color: rgb(37, 41, 60);
    }

    .slider-footer .toggle {
      display: flex;
      position: absolute;
      right: 0;
      top: 12px;
    }

    .slider-footer .toggle button {
      width: 28px;
      height: 28px;
      margin-right: 12px;
      appearance: none;
      border: none;
      background: rgba(255, 255, 255, 0.1);
      color: #fff;
      border-radius: 4px;
      cursor: pointer;
    }

    .slider-footer .toggle button:hover {
      background: rgba(255, 255, 255, 0.2);
    }

    .slider-footer p {
      margin: 0;
      margin-bottom: 10px;
      color: #fff;
      font-size: 18px;
    }

    .slider-indicator {
      display: flex;
      margin: 0;
      padding: 0;
      list-style: none;
      align-items: center;
    }

    .slider-indicator li {
      width: 8px;
      height: 8px;
      margin: 4px;
      border-radius: 50%;
      background: #fff;
      opacity: 0.4;
      cursor: pointer;
    }

    .slider-indicator li.active {
      width: 12px;
      height: 12px;
      opacity: 1;
    }
  </style>
</head>

<body>
<div class="slider">
  <div class="slider-wrapper">
    <img src="./images/slider01.jpg" alt="" />
  </div>
  <div class="slider-footer">
    <p>奔涌吧，后浪！</p>
    <ul class="slider-indicator">
      <li class="active"></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
    </ul>
    <div class="toggle">
      <button class="prev">&lt;</button>
      <button class="next">&gt;</button>
    </div>
  </div>
</div>
<script>
  // 初始数据
  const sliderData = [
    { url: './images/slider01.jpg', title: '奔涌吧，后浪！', color: 'rgb(37, 41, 60)' },
    { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },
    { url: './images/slider03.jpg', title: '八年的怀旧游戏', color: 'rgb(47, 23, 100)' },
    { url: './images/slider04.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },
    { url: './images/slider05.jpg', title: '让世界通过B站看到东方大国文化', color: 'rgb(58, 91, 216)' },
    { url: './images/slider06.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
    { url: './images/slider07.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
    { url: './images/slider08.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },
  ]

  // 获取元素
  const img = document.querySelector('img')
  const title = document.querySelector('.slider-footer p')
  const footer = document.querySelector('.slider-footer')
  const lis = document.querySelectorAll('.slider-indicator li')
  const prev = document.querySelector('.prev')
  const next = document.querySelector('.next')
  // 整个轮播区域
  const slider = document.querySelector('.slider')

  function setInfo() {
    // 设置图片
    img.src = sliderData[i].url
    // 设置标题
    title.innerHTML = sliderData[i].title
    // 设置背景色
    footer.style.backgroundColor = sliderData[i].color
    // 设置小圆点高亮
    // 移除现有的 active
    document.querySelector('.active').classList.remove('active')
    // 添加当前的高亮
    lis[i].classList.add('active')
  }

  // 需求1: 点击右侧按钮实现顺序播放
  // 1.1 定义变量当做索引计数
  let i = 0
  // 1.2 当用户点击按钮时, 索引自增
  // 绑定事件
  next.addEventListener('click', function() {
    // 索引自增
    i++
    // 1.3 处理索引越界问题
    i %= sliderData.length
    // 1.4 设置信息
    setInfo()
  })

  // 需求2: 点击左侧按钮实现倒序播放
  prev.addEventListener('click', function() {
    // 2.1索引自减
    i--
    // 2.2 处理索引越界问题
    // i = (i + sliderData.length) % sliderData.length
    // console.log(i)
    if (i < 0) i = sliderData.length - 1
    // 2.3 设置信息
    // 由于点击上一张和下一张修改信息的代码完全一样, 可以进行函数封装
    setInfo()
  })

  // 需求3: 自动轮播
  // 3.1 开启定时器
  let timerId = setInterval(function() {
    // 3.2 每隔一秒触发一次右侧按钮的点击事件
    // 模拟用户点击, 触发点击事件: 元素对象.click()   focus() ...
    next.click()
  }, 1000)

  // 需求4: 鼠标经过整个轮播区域, 停止轮播, 离开整个区域, 继续播放
  // 4.1 给整个区域绑定鼠标经过事件
  slider.addEventListener('mouseenter', function() {
    // 走一步测一步, 避免 Bug 堆积过多
    // console.log('鼠标经过')
    // 4.2 经过后关闭定时器
    // console.log(timerId)
    clearInterval(timerId)
  })
  // 4.3 给整个区域绑定鼠标离开事件
  slider.addEventListener('mouseleave', function() {
    // 4.4 离开后重新开启定时器
    timerId = setInterval(function() {
      next.click()
    }, 1000)
  })

  // 需求5: 点击小圆点切换轮播图
  // 5.1 给所有的小圆点注册点击事件
for (let j =0; j<lis.length; j++){
  // 5.2点击后修改索引    i 为小圆点的索引
  lis[j].addEventListener('click',function (){
    console.log(j)
    i=j
    setInfo()
  })

}
</script>
</body>

</html>